package main

import (
	"fmt"
	"sync"
)

type Singleton struct{}

var (
	instance *Singleton
	once     sync.Once // 使用 sync.Once 控制初始化
)

func GetInstance() *Singleton {
	once.Do(func() {
		instance = &Singleton{} // 这个函数只会被执行一次
	})
	return instance
}

func main() {
	for i := 0; i < 10; i++ {
		go func() {
			fmt.Printf("%p\n", GetInstance())
		}()
	}
	fmt.Scanln()
}
